package datapack

type RowQueue struct {
	isEof bool
	queue []*Row
}

func NewRowQueue() *RowQueue {
	return &RowQueue{
		isEof: false,
		queue: make([]*Row, 0),
	}
}

func (q *RowQueue) Enqueue(row *Row) {
	if row == nil {
		q.isEof = true
	} else {
		q.queue = append(q.queue, row)
	}
}

func (q *RowQueue) Dequeue() *Row {
	if len(q.queue) == 0 {
		return nil
	}
	row := q.queue[0]
	q.queue = q.queue[1:]
	return row
}

func (q *RowQueue) IsEOF() bool {
	return q.isEof
}

func (q *RowQueue) Len() int {
	return len(q.queue)
}

func (q *RowQueue) IsEmpty() bool {
	return q.Len() == 0
}
